/*===============================================
*   文件名称：sqlite3_test.c
*   创 建 者: Chenqw
*   创建日期：2023年06月30日
*   描    述：
================================================*/
#include <stdio.h>
#include <sqlite3.h>

int callback(void *data, int argc, char **argv, char **azColName) 
{
  	if(argc==0)//没查到数据
  	{
  	}
  	else//查到数据
  	{
  	*(int*)data=1;//改变标志，即修改flag
  	}
  	return 0;
}
int main(int argc, char *argv[])
{ 
    sqlite3 *db;
    int ret=sqlite3_open("my.db",&db);//打开数据库
    if(ret!=SQLITE_OK)
    {
        printf("open is %s\n",sqlite3_errstr(ret));
        return -1;
    }
    printf("打开数据库成功\n");
  
    char* err;
    //创建数据表
    ret=sqlite3_exec(db,"create table student(id int,name char,age int);",NULL,NULL,&err);
    if(ret!=SQLITE_OK)
    {
        printf("create is %s\n",err);
    }
    
    char name[20];
    int id;
    int age;
    char sql[200];
    int flag=0;
    char update_name[20];
    while(1){
    //添加信息
    printf("请输入要插入的账号 姓名 年龄：");
    scanf("%d%s%d",&id,name,&age);
    sprintf(sql,"insert into student values(%d,'%s',%d);",id,name,age);//将输入的数据写进数据库操作语句
    ret=sqlite3_exec(db,sql,NULL,NULL,&err);//插入数据
    if(ret!=SQLITE_OK)
    {
      printf("insert is %s\n",err);
      return -1;
    }
    else
    {
    	printf("插入信息成功\n");
    }
    //删除
    printf("请输入要删除的姓名：");
    //scanf("%d%s%d",&id,name,&age);
    scanf("%s",name);
    sprintf(sql,"delete from student where name='%s';",name);//将输入的数据写进数据库操作语句
    ret=sqlite3_exec(db,sql,NULL,NULL,&err);//执行删除操作
    if(ret!=SQLITE_OK)
    {
      printf("delete is %s\n",err);
      return -1;
    }
    else{
    printf("delete is ok\n");
    }
    //修改
    printf("请输入要修改的姓名和修改后的姓名：");
    scanf("%s%s",name,update_name);
    sprintf(sql,"update student set name='%s' where name='%s';",update_name,name);//将输入的数据写进数据库操作语句
    ret=sqlite3_exec(db,sql,NULL,NULL,&err);//执行修改操作
    if(ret!=SQLITE_OK)
    {
      printf("update is %s\n",err);
      return -1;
    }
    else{
    printf("update is ok\n");
    }
    //查询信息
    printf("请输入账号和姓名：");
    scanf("%d%s",&id,name);
    sprintf(sql,"select * from student where name='%s' and id=%d;",name,id);//将输入的数据写进数据库操作语句
    ret=sqlite3_exec(db,sql,callback,(void *)&flag,&err);//执行查询操作
     if(ret!=SQLITE_OK)
     {   
         printf("select is %s\n",err);
         return -1;
     }
     if(flag==0)//根据标志位判断是否查到
     {
     printf("NO\n");
     }
     else
     {
     printf("YES\n");
     }
     }
    //return 0;
} 
